<?php

define("fichero_errores","../resources/fichero_errores.txt");

/**
 * Clase para la gestión de excepciones. Cada vez que se produzca una excepcion, 
 * se llamará a esta clase para que muestre el correspondeinte mensaje de error por pantalla.
 * 
 * Se ha implementado el patrón singleton de forma que siempre exista una única instancia 
 * de esta clase en todo momento.
 *
 */
class gestor_excepciones
{
	//Variable del tipo gestor_excepciones que se utilizará en conjunción 
	//con el método get_instance para evitar que creemos más de una 
	//instancia de la misma clase.
	static private $instancia = null;
	
	/**
	 * Constructor de la clase gestor_excepciones.
	 *
	 */
	public function __construct() { }
	
	/**
	 * Método que impedirá que creemos más de una instancia de la misma clase.
	 *
	 * @return unknown
	 */
	static public function get_instance()
	{
	if (self::$instancia == null)
		{
			self::$instancia = new gestor_excepciones();
		}
    	return self::$instancia;			
	}
	
	/**
	 * Método que devuelve el código del error correspondiente número entero que le pasemos como parámetro.
	 *
	 * @param unknown_type $codigo_error
	 * @return unknown
	 */	
	public function mostrar_mensaje($codigo_error)
	{
		$texto_error="";
		$num_linea = 0;
		//Comprobamos que exista el fichero de errores. En caso contrario, tendremos que 
		//detener la ejecución del programa.
		try
		{
			if(!file_exists(fichero_errores))
			{
				throw new Exception;
			}
		} catch (Exception $ex)	{
			echo "ERROR: No se encuentra el fichero de errores.";    		
    		exit(1);
		}
		//Abrimos el fichero de errores.		
		$descriptor = fopen(fichero_errores,"r");		
		//En caso de haber abierto el fichero, lo recorremos en busca del error demandado.
		while(!(feof($descriptor)) && $texto_error=="") {			
			if ($linea = fgets($descriptor)) {
				if ($num_linea == $codigo_error)
				{
					//Si estoy en la linea que coincide con el número de error, guardo el texto de esa linea.
					$texto_error=$linea;
				}
				else
				{
					//Aumento la variable número de líneas
					$num_linea++;
				}								
			}			
		}
		fclose($descriptor);				
		return $texto_error;		
	}
	
}

?>